Skip to content

chore(license): normalize SPDX headers to PMPL-1.0-or-later#81

Merged
hyperpolymath merged 6 commits into
mainfrom
claude/neurophone-repo-cDOyQ
Jun 2, 2026
Merged

chore(license): normalize SPDX headers to PMPL-1.0-or-later#81
hyperpolymath merged 6 commits into
mainfrom
claude/neurophone-repo-cDOyQ

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

What

Sorts out the license/SPDX situation so the repo is internally consistent.

Key finding: the MPL-2.0 vs PMPL-1.0-or-later split was not a bug — NOTICE and 0-AI-MANIFEST.a2ml document that source files are governed by PMPL-1.0-or-later while the root LICENSE file and Cargo.toml license field intentionally carry MPL-2.0 as a compatibility shim for registries / OSI-license-detecting tooling. This PR makes the rest of the tree consistent with that documented design rather than overriding it.

Changes

  • Add missing SPDX headers (PMPL-1.0-or-later) to: crates/lsm/src/lib.rs, crates/claude-client/src/lib.rs, android/.../MainActivity.kt, android/.../NativeLib.kt.
  • Normalize stray / invalid headers to PMPL-1.0-or-later:
    • CONTRIBUTING.adoc (was the invalid MPL-2.0-or-later)
    • CHANGELOG.md, docs/tech-debt-2026-05-26.md doc header
    • .github/workflows/{rust-ci,cargo-audit,workflow-linter,hypatia-scan}.yml

Intentionally left as-is

  • Cargo.toml license = "MPL-2.0" and root LICENSE (MPL text) — documented compat shim.
  • Historical audit content (docs/governance/CRG-AUDIT-2026-04-18.adoc, tech-debt finding table) — point-in-time records.

Verification

  • Comment-only changes; no code paths touched.
  • grep confirms no source file is missing an SPDX header, and the only remaining MPL-2.0 references are the intentional shim + historical records.

This is the first small PR from the broader neurophone estate-compliance plan.

https://claude.ai/code/session_01Gu1JFCZHuBtBhAWPr4sMQw


Generated by Claude Code

claude added 3 commits June 2, 2026 08:11
Source files are governed by PMPL-1.0-or-later per NOTICE; the root
LICENSE and Cargo.toml license field intentionally remain MPL-2.0 as a
compatibility shim for registries/tooling (documented in NOTICE and
0-AI-MANIFEST.a2ml).

- Add missing SPDX headers: crates/lsm, crates/claude-client,
  MainActivity.kt, NativeLib.kt
- Normalize stray MPL-2.0 / invalid MPL-2.0-or-later headers to
  PMPL-1.0-or-later: CONTRIBUTING.adoc, CHANGELOG.md, docs/tech-debt
  doc header, and 4 workflow files
- Leave historical audit findings (docs/*audit*, tech-debt finding
  table) unchanged as point-in-time records

https://claude.ai/code/session_01Gu1JFCZHuBtBhAWPr4sMQw
… split

Make the licence statement uniform and remove all header debate so no
file carries a competing/duplicate licence statement or stale MPL
header-talk. MPL-2.0 now appears only inside the Palimpsest licence text
itself (the permitted exception).

- LICENSE: replace MPL-2.0 text with the Palimpsest (PMPL-1.0-or-later) text
- Cargo.toml: license = PMPL-1.0-or-later (matches source headers + estate
  convention, e.g. stapeln.toml)
- NOTICE: drop the MPL-vs-PMPL compatibility explanation; single PMPL notice
- 0-AI-MANIFEST.a2ml: drop "unless platform requires MPL-2.0" caveat
- docs/tech-debt-2026-05-26.md: correct stale MPL-2.0 licence findings to PMPL

https://claude.ai/code/session_01Gu1JFCZHuBtBhAWPr4sMQw
…MPL text

- docs/governance/CRG-AUDIT-2026-04-18.adoc: remove the three literal
  MPL-2.0 references (file inventory, merge-conflict example, and
  recommendation wording) while keeping each section coherent
- Remove now-orphaned LICENSES/MPL-2.0.txt (no file declares MPL-2.0;
  the Palimpsest licence incorporates MPL by reference)

MPL now appears only inside the Palimpsest licence text/explainer.

https://claude.ai/code/session_01Gu1JFCZHuBtBhAWPr4sMQw
Stand up a proof corpus so the MUST.contractile obligations
(no Admitted/sorry, no removal of proofs, ABI-change-needs-proof) refer to
real artefacts. Maps each obligation from issue #84 to its toolchain.

- proofs/README.adoc: obligation index + toolchain split + status
- proofs/tla/Lifecycle.tla: TLA+ safety spec for NeuroSymbolicSystem
  (no use before initialize; shutdown terminal/idempotent) — obligation 2.1
- proofs/{lean,dafny}/README.adoc: scoped placeholders for 1.1/1.3 and 1.2/0.2
- esn, lsm: #![allow(unsafe_code)] -> #![deny(unsafe_code)] (Tier 0.3).
  deny (not forbid) because ndarray-rand/rand_distr macros expand to an inner
  #[allow(unsafe_code)] that forbid rejects (E0453); deny still hard-errors on
  any unsafe we write. The other five crates already forbid.

Note: esn/lsm have a pre-existing compile break (rand 0.9 vs 0.10 in the lock
file + drifted API) unrelated to this change; filed separately.

https://claude.ai/code/session_01Gu1JFCZHuBtBhAWPr4sMQw
claude added 2 commits June 2, 2026 09:15
README.adoc 551 -> 204 lines. Relocate-and-trim; no content dropped.

- docs/architecture.adoc: Rust crates, Android app, components, performance, topology
- docs/usage.adoc: Kotlin + Rust APIs
- docs/build.adoc: prerequisites, build, model download, configure, development
- docs/installation.adoc: AI-assisted install, privacy notice, troubleshooting, uninstall
- README keeps overview (What This Is, Target Device, Core Purpose, Key
  Differentiators), a thin Installation pointer, a Documentation index, and
  Related Projects / RSR / Contributing / License / Citation / Contact.

https://claude.ai/code/session_01Gu1JFCZHuBtBhAWPr4sMQw
…ild (#85)

The workspace declared rand 0.10 + rand_distr 0.6 while the source uses the
rand 0.9 API (rand::rng(), rng.random::<T>(), rng.sample, shuffle) and
ndarray-rand 0.16 pulls rand 0.9 — so two rand majors resolved and RNG method
resolution failed (E0277/E0599). Pinning to rand 0.9 / rand_distr 0.5 yields a
single rand version. `cargo check --workspace` is now green.

https://claude.ai/code/session_01Gu1JFCZHuBtBhAWPr4sMQw
@hyperpolymath
hyperpolymath merged commit 6269ccb into main Jun 2, 2026
24 of 26 checks passed
@hyperpolymath
hyperpolymath deleted the claude/neurophone-repo-cDOyQ branch June 2, 2026 09:24
hyperpolymath added a commit that referenced this pull request Jun 2, 2026
…merge) (#102)

## Summary

Restores neurophone to **MPL-2.0** throughout, per the canonical estate
license policy ([owner directive
2026-06-02](https://github.com/hyperpolymath/), [memory:
feedback_estate_license_policy_umbrella]).

**Two commits:**

1. **Revert #81** — `chore(license): normalize SPDX headers to
PMPL-1.0-or-later` was admin-merged in the 2026-06-02 estate sweep by
mistake. It went the wrong direction (MPL→PMPL) and also conflated SPDX
changes with adding new docs/proofs scaffolding. The revert restores:
pre-#81 LICENSE text + LICENSES/MPL-2.0.txt + NOTICE + 19 SPDX flips.
2. **Sweep stray PMPL→MPL** — flips the remaining 118 files that already
had `SPDX-License-Identifier: PMPL-1.0-or-later` from before #81
(canonical-memory-documented drift across `.kt`, AndroidManifest, `.sh`
hooks, `.machine_readable/`, `.github/workflows/`, crates). Also
normalises 1 invalid `MPL-2.0-or-later` identifier (CONTRIBUTING.adoc)
to `MPL-2.0`.

## Why

Per the canonical 5-way license matrix ([estate-license-policy-umbrella
memory](file)):

| Category | License | Applies to |
|---|---|---|
| Sole owner repos (default) | MPL-2.0 | neurophone falls here |
| 007 | All Rights Reserved | — |
| Shared with son | AGPL-3.0-or-later | — |
| Third-party / forks | LEAVE ALONE | — |
| Palimpsest carve-out | PMPL-1.0-or-later | palimpsest-license +
palimpsest-plasma + consent-aware-http only |

PMPL in neurophone violates the matrix. Owner directive 2026-06-02
reinforced this explicitly.

## Excluded from sweep

- `LICENSES/PMPL-1.0-or-later.txt` — the PMPL license-text file itself
(legitimate reference, restored by revert)
- `NOTICE` — governance prose, restored to pre-#81 state by revert
- `PALIMPSEST.adoc` — concept doc retained (only its own SPDX header
swept to MPL-2.0)

## Cost of mis-merge — what was lost (and how to recover)

Reverting #81 also dropped 4 new docs + proofs/ scaffolding that the PR
had bundled in:
- \`docs/architecture.adoc\` (149 lines)
- \`docs/build.adoc\` (72 lines)
- \`docs/installation.adoc\` (113 lines)
- \`docs/usage.adoc\` (41 lines)
- \`proofs/README.adoc\` + \`proofs/dafny/README.adoc\` +
\`proofs/lean/README.adoc\` + \`proofs/tla/Lifecycle.tla\`

These can be reintroduced cleanly in a separate, license-free PR after
this lands. They were not retained in this PR to keep scope tight
(license correction only).

## Test plan

- [ ] grep \`SPDX-License-Identifier:.*PMPL\` returns only
\`LICENSES/PMPL-1.0-or-later.txt\` + \`NOTICE\` (legitimate)
- [ ] grep \`SPDX-License-Identifier:.*MPL.*or-later\` returns nothing
(invalid id eliminated)
- [ ] CI green (governance / licence consistency should now pass)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Signed-off-by: hyperpolymath <6759885+hyperpolymath@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
hyperpolymath added a commit that referenced this pull request Jun 2, 2026
…affolding (follow-up to #102) (#120)

## Summary

Restores the 8 docs+proofs files that PR #81 added but #102 had to drop
while reverting #81's wrong-direction license change. Per #102's PR
body:

> "Reverting #81 also dropped 4 new docs + proofs/ scaffolding... These
can be reintroduced cleanly in a separate, license-free PR after this
lands."

This is that PR.

## Files (all NEW, no edits to existing content)

| File | Purpose |
|---|---|
| `docs/architecture.adoc` | LSM/ESN/bridge architecture (149 lines) |
| `docs/build.adoc` | Build instructions (72 lines) |
| `docs/installation.adoc` | Installation guide pointed-to by README
(113 lines) |
| `docs/usage.adoc` | Usage docs (41 lines) |
| `proofs/README.adoc` | Proof corpus index |
| `proofs/dafny/README.adoc` | Dafny/F* proofs subdirectory |
| `proofs/lean/README.adoc` | Lean/Coq proofs subdirectory |
| `proofs/tla/Lifecycle.tla` | TLA+ lifecycle obligation 2.1 (issue #84)
|

## Licensing

All 8 files carry \`SPDX-License-Identifier: MPL-2.0\` per the canonical
estate license policy (neurophone = sole-owner repo). #81 had originally
added these with PMPL stamps; this PR adds them with the correct MPL-2.0
SPDX from the start.

## Verification

\`\`\`sh
grep -r 'SPDX-License-Identifier' docs/architecture.adoc docs/build.adoc
\\
  docs/installation.adoc docs/usage.adoc proofs/
\`\`\`

All 8 files report \`MPL-2.0\`.

## Test plan

- [ ] CI green (no new SPDX violations)
- [ ] Files render correctly (asciidoctor + TLA+ syntax)
- [ ] \`docs/installation.adoc\` link from README.adoc resolves

## Why draft

License sweep aftermath; owner sight on docs reintroduction before
flipping to ready.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants